#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>

#include "proto.h"

int main(int argc, char** argv)
{
	struct sockaddr_in raddr;
	socklen_t raddr_len; // 接收文件数据的长度
	struct msg_st snd_data;
	struct file_st rcv_data;
	int udp_socket;
	int ret;
   
	if (argc < 3) {
		printf("请指明服务端地址和文件路径\n");
		return 0;
	}
	udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

	if (-1 == udp_socket) {
		perror("Error creating udp socket");
		exit(1);
	}

	snd_data.id = 1;
	strncpy(snd_data.name, argv[2], NAMESIZE); // 第二个参数是请求的路径

	raddr.sin_family = AF_INET;
	inet_aton(argv[1], &raddr.sin_addr); // 第一个参数是服务器地址
	raddr.sin_port = htons(PORT);

	sendto(udp_socket, &snd_data, sizeof (snd_data.id) + strlen(snd_data.name) + 1, \
			0, (struct sockaddr *) &raddr, sizeof (raddr));

	ret = recvfrom(udp_socket, &rcv_data, sizeof (rcv_data), 0, (struct sockaddr *) &raddr, &raddr_len);
	if (-1 == ret) {
		perror("Error receiving file bytes");
		goto ERROR;
	}

	// 打印收到的文件内容
	printf("Received:\n%s", rcv_data.bytes);

	close(udp_socket);

	return 0;

ERROR:
	close(udp_socket);
	exit(1);
}

